<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
 <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
 <meta http-equiv="content-style-type" content="text/css" />
 <meta name="author" content="WarpEnterprises, Arlsair" />
 <meta name="date" content="2003-07-09" />
 <title>Resize AviSynth Filter</title>
 <link rel="stylesheet" type="text/css" href="../../style.css" />
 <style type="text/css">td {vertical-align:top;}</style>
</head><body>
<h3><a name="Resize"></a>BicubicResize / BilinearResize / LanczosResize / PointResize</h3>

<tt>BicubicResize(</tt><i>clip, int &quot;target_width&quot;, int &quot;target_height&quot;, float &quot;b&quot;, float &quot;c&quot;</i><tt>)</tt><br />
<tt>BilinearResize(</tt><i>clip, int &quot;target_width&quot;, int &quot;target_height&quot;</i><tt>)</tt><br />
<tt>LanczosResize(</tt><i>clip, int &quot;target_width&quot;, int &quot;target_height&quot;</i><tt>)</tt><br />
<tt>PointResize(</tt><i>clip, int &quot;target_width&quot;, int &quot;target_height&quot;</i><tt>)</tt><br />
<br />
Bei allen diesen Filtern zur Gr&ouml;&szlig;en&auml;nderung kann eine erweiterte Syntax verwendet werden, die vor dem Verkleinern bzw. Vergr&ouml;&szlig;ern das Bild abschneidet. Die gleiche Operation wird durch <a href="crop.htm"><tt>Crop()</tt></a> vor dem Resize erreicht.<br />
<br />
<table border="1" width="75%">
 <tr>
  <td><tt>Crop(10,10,200,300).BilinearResize(100,150)</tt><br />
      <br />
      ist das gleiche wie<br />
      <br />
      <tt>BilinearResize(100,150,10,10,200,300)</tt>
  </td>
 </tr>
</table><br />

<tt>BicubicResize(</tt><i>clip, int &quot;target_width&quot;, int &quot;target_height&quot;, float &quot;b&quot;, float &quot;c&quot;, float &quot;src_left&quot;, float &quot;src_top&quot;, float &quot;src_width&quot;, float &quot;src_height&quot;</i><tt>)</tt><br />
<tt>BilinearResize(</tt><i>clip, int &quot;target_width&quot;, int &quot;target_height&quot;, float &quot;src_left&quot;, float &quot;src_top&quot;, float &quot;src_width&quot;, float &quot;src_height&quot;</i><tt>)</tt><br />
<tt>LanczosResize(</tt><i>clip, int &quot;target_width&quot;, int &quot;target_height&quot;, float &quot;src_left&quot;, float &quot;src_top&quot;, float &quot;src_width&quot;, float &quot;src_height&quot;</i><tt>)</tt><br />
<tt>PointResize(</tt><i>clip, int &quot;target_width&quot;, int &quot;target_height&quot;, float &quot;src_left&quot;, float &quot;src_top&quot;, float &quot;src_width&quot;, float &quot;src_height&quot;</i><tt>)</tt><br />
<br />
<b>Wichtig:</b> AviSynth hat (intern) v&ouml;llig getrennte vertikale und horizontale Filter zur Gr&ouml;&szlig;en&auml;nderung. Wenn in einer Richtung keine &Auml;nderung notwendig ist, wird dieser Teil &uuml;bersprungen.<br />
Es wird zuerst die Richtung mit dem kleineren Verh&auml;ltnis bearbeitet, damit die bestm&ouml;gliche Qualit&auml;t erhalten wird und der Filter f&uuml;r die zweite Richtung ein m&ouml;glichst gutes Eingangsbild bekommt.<br />
<br />
<hr />
<br />
Der <tt>BilinearResize</tt> Filter skaliert die eingehenden Frames in eine beliebig andere Aufl&ouml;sung. Wenn man die optionalen <i>source</i> Argumente angibt, ist das Ergebnis das gleiche, als wenn man zuvor <tt>Crop</tt> angewendet h&auml;tte mit diesen Argumenten. Allerdings w&auml;re dies nicht so schnell.<br />
<br />
<tt>BilinearResize</tt> verwendet einen Standard-Bilinear-Filter, der fast identisch mit dem VirtualDub-Filter &quot;precise bilinear&quot; ist. Nur &quot;fast&quot; deshalb, da VirtualDub hier einen winzigen Skalierungsfehler macht, bei dem die oberste und unterste Zeile abgeschnitten oder verdoppelt werden, was aber nur bei bei einer Vergr&ouml;&szlig;erung um 2 oder mehr auff&auml;llt.<br />
<br />
<table border="1">
 <tr>
  <td>Beispiele:<br />
      <br />
      # eine Video-Datei laden und die Gr&ouml;&szlig;e auf 240x180 &auml;ndern (egal wie gro&szlig; die Aufl&ouml;sung vorher war):<br />
      <tt>AVISource(&quot;Dateiname.avi&quot;).BilinearResize(240,180)</tt><br />
      <br />
      # ein 720x480 (CCIR601)-Video laden und die Gr&ouml;&szlig;e auf 352x240 (VCD-NTSC) &auml;ndern,<br />
      # wobei das korrekte Seitenverh&auml;ltnis beibehalten wird:<br />
      <tt>AVISource(&quot;Dateiname.avi&quot;).BilinearResize(352,240,8,0,704,480)</tt><br />
      <br />
      # das rechte obere Quadrat eines 320x240 Videos rausschneiden und auf den ganzen Frame vergr&ouml;&szlig;ern:<br />
      <tt>BilinearResize(320,240,160,0,160,120)</tt>
  </td>
 </tr>
</table>
<br />
<hr />
<br />
<tt>BicubicResize</tt> ist &auml;hnlich wie <tt>BilinearResize</tt>, es wird aber eine zweifach kubische Mitchell-Netravali-Filter-Funktion eingesetzt.<br />
Mit den Parametern <i>b</i> und <i>c</i> kann die Eigenschaft dieser Funktion eingestellt werden, die Parameter werden auch manchmal als &quot;blurring&quot; (verwischen) und &quot;ringing&quot; (Ringe zeichnen) bezeichnet.<br />
<br />
Mit <i>b</i> = 0 und <i>c</i> = 0.75 ist der Filter genau gleich wie der VirtualDub-Filter &quot;precise bicubic&quot; (bis auf das genannte Skalierungsproblem). Der Standardwert ist <i>b</i> = 1/3 und <i>c</i> = 1/3, das sind die von Mitchell und Netravali empfohlenen Werte, die das subjektiv sch&ouml;nste Bild ergeben. Mit gr&ouml;&szlig;eren Werten von <i>b</i> und <i>c</i> k&ouml;nnen interessante Effekte entstehen, z.B. mit <i>b</i> = 0 und <i>c</i> = -5. <br />
<br />
Beim Vergr&ouml;&szlig;ern eines Videos erh&auml;lt man mit <tt>BicubicResize</tt> wesentlich bessere Ergebniss als mit<tt> BilinearResize</tt>. Beim Verkleinern kann <tt>BilinearResize</tt> gleich gut oder sogar besser sein. Ein bikubischer Filter erzeugt Bilder, die sch&ouml;ner aussehen, allerdings deswegen, da eine leichte Sch&auml;rfung stattfindet und nicht wegen einer exakteren Abtastung. Scharfe Bilder schauen gut aus, solange man sie nicht komprimiert, dann k&ouml;nnen sie leicht h&auml;sslich werden. Besonders beim Encoden mit niedriger (knapper) Bitrate gibt <tt>BilinearResize</tt> meist bessere Ergebnisse.<br />
<br />
Man muss<br />
b + 2 * c = 1<br />
setzen um einen numerisch genauen Filter zu erhalten.<br />
Daher kann f&uuml;r b = 0 ein maximales c = 0.5 verwendet werden, das ist dann ein Catmull-Rom-Spline und ein guter Wert f&uuml;r maximale Sch&auml;rfe.<br />
<br />
Mit Werten c&gt;0.6 f&auml;ngt der Filter an, Ring-Artefakte zu produzieren. Es entsteht hier keine echte Sch&auml;rfe mehr, vielmehr eine Kantenkorrektur wie beim Fernseher.<br />
F&uuml;r b d&uuml;rfen keine negativen Werte verwendet werden. b muss mindestens 0 sein.<br />
<br />
<hr />
<br />
<tt>LanczosResize</tt> ist eine Alternative f&uuml;r<tt> BicubicResize</tt> mit hohen Werten von c von 0.6 ... 0.75 und erzeugt relativ starke Sch&auml;rfung.<br />
Es bietet normalerweise eine h&ouml;here Qualit&auml;t (weniger Artefakte) und gleichzeitig ein scharfes Bild.<br />
<br />
<hr />
<br />
<tt>PointResize</tt> ist die denkbar einfachste Methode, die einen Punkt-Sampler oder einen N&auml;chster-Nachbar-Algorithmus verwendet, was ein sehr geblocktes Bild erzeugt. Dieser Filter sollte daher nur verwendet werden, wenn man absichtlich eine &quot;schlechte&quot; Bildqualit&auml;t erzeugen m&ouml;chte oder klare Pixel-Zeichnungen m&ouml;chte.<br />
Weiter kann es auch zum probeweisen Vergr&ouml;&szlig;ern verwendet werden.<br />
<br />
<form action=""><input type="button" value="Zur&uuml;ck" onclick="history.go(-1)" /></form>
</body>
</html>
